package no21.thread;

public class EvenGenerator extends IntGenerator {

	private int currentEvenValue = 0;
	private String str;
	
	@Override
	// 比较下加上synchronized 前后
	// synchronized 会阻塞
	// synchronized 是对一个对象而言的
	// 将currentEvenValue设置为 private可以防止属性被直接访问
	public synchronized int next() {
		//获得str对象的锁
		synchronized(str){
			str.notify();//释放锁
		}
		//获得对象锁
		synchronized(this){
			
		}//释放对象锁
		// 两次操作可能与其它线程并发
		++currentEvenValue;
		++currentEvenValue;
		return currentEvenValue;
	}

	// 多个方法操作一个属性时,只要对多个方法都加synchronized即可
	public synchronized int next1() {
		// 两次操作可能与其它线程并发
		++currentEvenValue;
		++currentEvenValue;
		return currentEvenValue;
	}

	public static void main(String[] args) {
		EvenChecker.test(new EvenGenerator());
		
	}
}
